package com.sl.ms.sms.handler;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.sl.ms.sms.annotation.SendChannel;
import com.sl.ms.sms.config.ALiyunSmsConfigur;
import com.sl.ms.sms.entity.SmsRecordEntity;
import com.sl.ms.sms.entity.SmsThirdChannelEntity;
import com.sl.ms.sms.enums.SendChannelEnum;
import com.sl.ms.sms.enums.SendStatusEnum;
import com.sl.ms.sms.utils.HttpUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpResponse;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
@Component
@SendChannel(type = SendChannelEnum.SAN_FAN)
public class SanFanSmsSendHandler implements SmsSendHandler {
    @Resource
    private ALiyunSmsConfigur alIyunSmsConfigur;
    @Override
    public void send(SmsThirdChannelEntity smsThirdChannelEntity, List<SmsRecordEntity> smsRecordEntities) {
        //第三方发送短信验证码
        log.info("smsRecordEntities：{}", smsRecordEntities);
        log.info("smsThirdChannelEntity：{}", smsThirdChannelEntity);
        String host = "https://wwsms.market.alicloudapi.com";
        String path = "/send_sms";
        String method = "POST";
        String appcode = alIyunSmsConfigur.getAppCode();
        Map<String, String> headers = new HashMap<String, String>();
        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
        headers.put("Authorization", "APPCODE " + appcode);
        //根据API的要求，定义相对应的Content-Type
        headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        Map<String, String> querys = new HashMap<String, String>();
        Map<String, String> bodys = new HashMap<String, String>();
        bodys.put("content", "code:1224");
        bodys.put("template_id", "CST_11253");   //注意，模板CST_11253 仅作调试使用，下发短信不稳定，请联系客服报备自己的专属签名模板，以保障业务稳定使用
        bodys.put("phone_number", "");

//可以提交工单联系客服，或者钉钉联系，钉钉号：1ko_t720ssqc54
        CollUtil.forEach(smsRecordEntities, (value, index) -> {
            try {
                /**
                 * 重要提示如下:
                 * HttpUtils请从\r\n\t    \t* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java\r\n\t    \t* 下载
                 *
                 * 相应的依赖请参照
                 * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
                 */
                HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
                if (StrUtil.equalsAnyIgnoreCase(response.getStatusLine().getReasonPhrase(), "OK")) {
                    //设置发送成功状态
                    value.setStatus(SendStatusEnum.SUCCESS);
                } else {
                    //设置发送失败状态
                    value.setStatus(SendStatusEnum.FAIL);
                    log.info("短信发送失败 ... value = {}", value);
                }
            } catch (Exception error) {
                // 如有需要，请打印 error
                value.setStatus(SendStatusEnum.FAIL);
                log.error("短信发送出现异常 ... value = {}", value, error);
            }
        });
    }
}


